package cn.bs.seckill.exception;

import cn.bs.seckill.vo.RespBean;
import cn.bs.seckill.vo.RespBeanEnum;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;



//全局异常处理类
//@RestControllerAdvice 可以直接返回ResponseBody
@RestControllerAdvice
public class GlobalExceptionHandler {

    //注入顶级异常
    @ExceptionHandler(Exception.class)

    public RespBean ExceptionHandler(Exception e){
        //如果触发了异常,那么就会把GlobalException创建为Exception,这样系统才知道GlobalException是个异常信息
        if (e instanceof GlobalException){
            //把异常强转为指定的异常
            GlobalException exception =(GlobalException) e;
            //返回指定的错误信息
            return RespBean.error(exception.getRespBeanEnum());

        }
        //如果触发了绑定异常,就创建绑定异常(这个是303提供的异常)
        else if(e instanceof BindException){
            //把异常强转为指定的异常
            BindException exception = (BindException) e;
            //抛出指定的错误信息
            RespBean error = RespBean.error(RespBeanEnum.LOGIN_ERRORID);
            //设置自己想展示的信息---getAllErrors().get(0)意思是展示第一个异常
            error.setMessage("账号格式不正确:"+exception.getBindingResult().getAllErrors().get(0).getDefaultMessage());
            //返回指定的错误信息
            return error;
        }
        return RespBean.error(RespBeanEnum.ERROR);
    }

}
